// pages/publish/publish.js
const galleryApi = require('../../api/galleryApi');

Page({

  /**
   * 页面的初始数据
   */
  data: {
    imageInfo: null,
    title: '',
    description: '',
    tagsText: '',
    tags: [],
    publishing: false,
    agreedToTerms: false,
    titleLimit: 30,
    descLimit: 200,
    tagsLimit: 50
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    // 从全局数据获取当前图片信息
    const app = getApp();
    const currentImage = app.globalData && app.globalData.currentImage;
    
    if (!currentImage) {
      wx.showToast({
        title: '未找到图片信息',
        icon: 'error'
      });
      
      // 延迟返回
      setTimeout(() => {
        wx.navigateBack();
      }, 1500);
      return;
    }
    
    // 设置初始标题为提示词的前20个字符
    const initialTitle = currentImage.prompt ? 
      (currentImage.prompt.slice(0, 20) + (currentImage.prompt.length > 20 ? '...' : '')) : '';
    
    this.setData({
      imageInfo: currentImage,
      title: initialTitle
    });
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    if (this.data.imageInfo && this.data.imageInfo.imageUrl) {
      return {
        title: this.data.title || 'AI创作作品',
        imageUrl: this.data.imageInfo.imageUrl,
        path: '/pages/create/create'
      };
    }
    
    return {
      title: '一键生成精美AI图像',
      path: '/pages/create/create'
    };
  },

  /**
   * 输入标题
   */
  onInputTitle(e) {
    const value = e.detail.value.slice(0, this.data.titleLimit);
    this.setData({
      title: value
    });
  },

  /**
   * 输入描述
   */
  onInputDescription(e) {
    const value = e.detail.value.slice(0, this.data.descLimit);
    this.setData({
      description: value
    });
  },

  /**
   * 输入标签
   */
  onInputTags(e) {
    const tagsText = e.detail.value.slice(0, this.data.tagsLimit);
    
    // 将标签文本分割成数组
    let tags = [];
    if (tagsText) {
      // 使用空格分隔，过滤空标签
      tags = tagsText.split(/\s+/).filter(tag => tag.trim().length > 0);
    }
    
    this.setData({
      tagsText,
      tags
    });
  },

  /**
   * 预览大图
   */
  previewImage() {
    if (!this.data.imageInfo || !this.data.imageInfo.imageUrl) {
      wx.showToast({
        title: '图片信息不存在',
        icon: 'none'
      });
      return;
    }
    
    wx.previewImage({
      urls: [this.data.imageInfo.imageUrl],
      current: this.data.imageInfo.imageUrl
    });
  },

  /**
   * 返回上一页
   */
  onBack() {
    wx.navigateBack();
  },

  /**
   * 取消发布
   */
  onCancel() {
    wx.showModal({
      title: '取消发布',
      content: '确定要取消发布吗？已填写的内容将不会保存。',
      cancelText: '继续编辑',
      confirmText: '确定取消',
      success: (res) => {
        if (res.confirm) {
          wx.navigateBack();
        }
      }
    });
  },

  /**
   * 切换协议同意状态
   */
  toggleAgreement() {
    this.setData({
      agreedToTerms: !this.data.agreedToTerms
    });
  },

  /**
   * 跳转到用户协议
   */
  goToTerms() {
    // 跳转到用户协议页面
    wx.navigateTo({
      url: '/pages/terms/terms'
    });
  },

  /**
   * 发布作品
   */
  onPublish() {
    // 检查图片信息
    if (!this.data.imageInfo || !this.data.imageInfo.imageUrl) {
      wx.showToast({
        title: '图片信息不存在',
        icon: 'none'
      });
      return;
    }
    
    // 检查标题
    if (!this.data.title.trim()) {
      wx.showToast({
        title: '请输入作品标题',
        icon: 'none'
      });
      return;
    }
    
    // 检查协议同意
    if (!this.data.agreedToTerms) {
      wx.showToast({
        title: '请先同意用户协议',
        icon: 'none'
      });
      return;
    }
    
    // 显示发布中
    this.setData({ publishing: true });
    
    wx.showLoading({
      title: '发布中...',
      mask: true
    });
    
    // 先检查是否已经是云存储的fileID
    if (this.data.imageInfo.imageUrl.indexOf('cloud://') === 0) {
      // 已经是云文件ID，直接发布
      this.submitPublish(this.data.imageInfo.imageUrl);
    } else {
      // 是网络URL，需要先下载再上传到云存储
      this.uploadImageToCloud(this.data.imageInfo.imageUrl);
    }
  },
  
  /**
   * 上传图片到云存储
   */
  uploadImageToCloud(imageUrl) {
    console.log('开始上传图片到云存储:', imageUrl);
    
    // 先下载图片到本地
    wx.downloadFile({
      url: imageUrl,
      success: res => {
        if (res.statusCode === 200) {
          console.log('图片下载成功，临时路径:', res.tempFilePath);
          
          // 将临时文件上传到云存储
          const cloudPath = `temp/${Date.now()}.jpg`;
          wx.cloud.uploadFile({
            cloudPath: cloudPath,
            filePath: res.tempFilePath,
            success: uploadRes => {
              console.log('上传到云存储成功，fileID:', uploadRes.fileID);
              // 获取到fileID后提交发布
              this.submitPublish(uploadRes.fileID);
            },
            fail: err => {
              console.error('上传到云存储失败:', err);
              this.handlePublishError('上传图片失败，请重试');
            }
          });
        } else {
          console.error('下载图片失败，状态码:', res.statusCode);
          this.handlePublishError('下载图片失败，请重试');
        }
      },
      fail: err => {
        console.error('下载图片失败:', err);
        this.handlePublishError('下载图片失败，请重试');
      }
    });
  },
  
  /**
   * 提交发布信息
   */
  submitPublish(fileID) {
    console.log('准备发布图片，fileID:', fileID);
    
    // 准备要上传的数据
    const publishData = {
      imageUrl: fileID,
      prompt: this.data.imageInfo.prompt || '',
      negativePrompt: this.data.imageInfo.negativePrompt || '',
      style: this.data.imageInfo.style || 'realistic',
      size: this.data.imageInfo.size || '1024*1024',
      title: this.data.title,
      description: this.data.description,
      tags: this.data.tags
    };
    
    // 调用发布API
    galleryApi.publishImage(publishData)
      .then(res => {
        console.log('发布成功:', res);
        
        this.setData({ publishing: false });
        
        wx.hideLoading();
        wx.showToast({
          title: '发布成功',
          icon: 'success'
        });
        
        // 设置全局刷新标志，通知画廊页面需要刷新
        const app = getApp();
        app.globalData.galleryNeedRefresh = true;
        
        // 同时设置存储，以防应用被销毁重新打开
        wx.setStorageSync('galleryNeedRefresh', true);
        
        // 延迟返回到首页
        setTimeout(() => {
          wx.switchTab({
            url: '/pages/gallery/gallery'
          });
        }, 1500);
      })
      .catch(err => {
        console.error('发布失败:', err);
        this.handlePublishError(err.message || '发布失败，请重试');
      });
  },
  
  /**
   * 处理发布错误
   */
  handlePublishError(message) {
    this.setData({ publishing: false });
    
    wx.hideLoading();
    wx.showToast({
      title: message,
      icon: 'none'
    });
  }
})